Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentIndex: 0,
    totalCount: 120,
    showMask: false,
    correctCount: 0,
    wrongCount: 0,
    duration: 300,
    // 1264 个空壳节点
    questionList: Array.from({
      length: 120
    }, (_, i) => ({
      id: i,
      loaded: false
    }))
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const cache = wx.getStorageSync('quizData_cache') || {};
    console.log("cache---",cache);
    if (cache) {
      const { 
        questionList = [], 
        currentIndex = 0,  // 提供默认值，防止缓存中缺少该属性
        correctCount = 0, 
        wrongCount = 0 
      } = cache;
    
      // 统一设置数据
      this.setData({
        questionList,
        currentIndex,
        correctCount,
        wrongCount
      });

      // 把 swiper 跳到对应题
      wx.nextTick(() => {
        const swiper = this.selectComponent('#swiper')
        swiper && swiper.setData({
          current: idx
        })
      })

      wx.showModal({
        title: '检测到上次答题记录',
        content: '是否继续上次的答题进度？',
        confirmText: '继续',
        cancelText : '重新作答',
        success: (res) => {
          if (res.confirm) {
            return
          }
          wx.removeStorageSync('quizData_cache');
          // 2. 恢复页面初始数据
          this.setData({
            currentIndex: 0,
            correctCount: 0,
            wrongCount: 0,
            showMask: false,
            // 重新生成 120 个空壳节点
            questionList: Array.from({
              length: 120
            }, (_, i) => ({
              id: i,
              loaded: false
            }))
          });

          // 3. 重新加载当前范围
          this.loadRange(0);
  
          // swiper 回到第 0 题
          wx.nextTick(() => {
            const swiper = this.selectComponent('#swiper')
            swiper?.setData({ current: 0 })
          })
        }
      })

    } else {
      // 2. 没有缓存，按老逻辑加载
      this.loadRange(this.data.currentIndex)
    }
  },

  mockQuestion(id) {
    // 1. 题库：题干 + 解析（答案不再固定，后面动态选）
    const questionBank = [{
        title: '马克思、恩格斯发表在《德法年鉴》上的论文表明，他们完成了哪些转变？',
        analysis: '这三项共同标志着马克思主义的思想前提正式确立，历史观发生伟大变革。'
      },
      {
        title: '马克思主义哲学的直接理论来源是？',
        analysis: '德国古典哲学、英国古典政治经济学和英法空想社会主义是马克思主义三大来源。'
      },
      {
        title: '下列哪些属于唯物史观的基本原理？',
        analysis: '社会存在决定社会意识，生产关系必须适合生产力状况，人民群众是历史的创造者。'
      },
      {
        title: '《共产党宣言》发表于哪一年？',
        analysis: '1848 年 2 月，《共产党宣言》在伦敦正式发表，标志着科学社会主义诞生。'
      },
      {
        title: '马克思在《资本论》中揭示的资本主义基本矛盾是？',
        analysis: '生产社会化与生产资料资本主义私人占有之间的矛盾是资本主义无法克服的根本矛盾。'
      }
    ];

    // 2. 按 id 循环取题
    const raw = questionBank[id % questionBank.length];

    // 3. 生成 3~7 个随机选项
    const optionPool = [
      '完成了从唯心主义向唯物主义的转变',
      '完成了从革命民主主义向共产主义的转变',
      '实现了历史观上的伟大变革',
      '为创立马克思主义奠定了思想前提',
      '推动了无产阶级的政治觉醒',
      '提出了剩余价值理论',
      '指明了资本主义必然灭亡的历史趋势',
      '创立了辩证唯物主义',
      '创立了历史唯物主义',
      '揭示了阶级斗争规律',
      '阐明了无产阶级专政思想',
      '提出了劳动价值论'
    ];

    const count = 3 + Math.floor(Math.random() * 5);
    const texts = optionPool
      .sort(() => 0.5 - Math.random())
      .slice(0, count);

    const options = texts.map((text, idx) => ({
      value: String.fromCharCode(65 + idx),
      text
    }));

    // 4. 在这批选项里再随机挑 1~3 个作为正确答案
    const answerCount = 1 + Math.floor(Math.random() * Math.min(3, options.length)); // 1~3
    const answer = options
      .sort(() => 0.5 - Math.random())
      .slice(0, answerCount)
      .map(o => o.value)
      .sort(); // 保证字母顺序一致

    // 5. 按答案数量决定题型
    const type = answer.length > 1 ? 'multiple' : 'single';

    return {
      id,
      title: raw.title,
      type,
      options,
      answer,
      analysis: raw.analysis,
      loaded: true,
    };
  },

  openMask() {
    this.setData({
      showMask: true
    });
  },
  closeMask() {
    this.setData({
      showMask: false
    });
  },
  stopBubble() {},
  jumpTo(e) {
    const idx = e.currentTarget.dataset.index;

    // 1. 关闭动画
    this.setData({
      duration: 0
    });

    // 2. 切题（放在 nextTick 里确保 duration 已生效）
    wx.nextTick(() => {
      this.setData({
        currentIndex: idx
      });

      // 3. 恢复动画
      wx.nextTick(() => {
        this.setData({
          duration: 300
        });
      });
    });

    // 4. 关闭蒙层
    this.setData({
      showMask: false
    });
  },

  // 用户点击选项
  Select(e) {
    const {
      qid,
      value
    } = e.currentTarget.dataset; // qid 就是数组下标
    const list = [...this.data.questionList];
    const q = list[qid];

    // 已判题禁止重复点
    if (q.judged) return;

    /* ---------- 收集用户答案 ---------- */
    let userAnswer = q.userAnswer ? [...q.userAnswer] : [];
    if (q.type === 'single') {
      // 单选：直接覆盖
      userAnswer = [value];
    } else {
      // 多选：toggle
      const idx = userAnswer.indexOf(value);
      idx > -1 ? userAnswer.splice(idx, 1) : userAnswer.push(value);
    }
    /* ---------- 是否立即判题 ---------- */
    // 单选：点一次就判
    // 多选：选够了（数量≥正确答案）就自动判，也可改成按钮“确定”
    let judged = q.type === 'single';
    let isRight = judged ?
      userAnswer.sort().join() === q.answer.sort().join() :
      null;
    if (q.type === 'single') {
      if (isRight) {
        this.setData({
          correctCount: this.data.correctCount + 1
        });
      } else {
        this.setData({
          wrongCount: this.data.wrongCount + 1
        });
      }
    }
    /* ---------- 更新数据 ---------- */
    const newQ = {
      ...q, //题目数据
      userAnswer, //用户选择的答案
      judged, //题目是否完成判断
      isRight,
      optionClasses: this.buildOptionClasses({
        ...q,
        userAnswer,
        judged
      })
    };
    // 关键：用模板里循环的索引 qid 精准更新数组项
    this.setData({
      [`questionList[${qid}]`]: newQ
    });
    wx.vibrateShort({
      success: () => console.log('已触发短震'),
      fail: (err) => console.error('震动失败', err)
    });
  },

  onSubmitMulti(e) {
    /* 1. 取出整道题 */
    const {
      index
    } = e.currentTarget.dataset; // qid 就是数组下标
    const list = [...this.data.questionList];
    const q = list[index];

    // 已判题禁止重复点
    if (q.judged) return;

    /* 2. 判题 */
    const userAnswer = q.userAnswer || [];

    if (userAnswer.length === 0) {
      wx.showToast({
        title: '请先选择答案',
        icon: 'none'
      });
      return;
    }

    const isRight = userAnswer.sort().join() === q.answer.sort().join();

    if (isRight) {
      this.setData({
        correctCount: this.data.correctCount + 1
      });
    } else {
      this.setData({
        wrongCount: this.data.wrongCount + 1
      });
    }

    // /* 3. 补充字段（可扩展更多） */
    const judgedQ = {
      ...q,
      judged: true,
      isRight,
      optionClasses: this.buildOptionClasses({
        ...q,
        userAnswer,
        judged: true
      })
    };

    // /* 4. 按 id 写回列表（保持原顺序） */
    this.setData({
      [`questionList[${index}]`]: judgedQ
    });

    wx.vibrateShort({
      success: () => console.log('已触发短震'),
      fail: (err) => console.error('震动失败', err)
    });
  },

  buildOptionClasses(q) {
    return q.options.map(opt => {
      const v = opt.value;
      const inUser = (q.userAnswer || []).includes(v);
      const inRight = (q.answer || []).includes(v);
      if (!q.judged) {
        return inUser ? 'selected' : '';
      }
      if (inRight) return 'correct';
      if (inUser) return 'wrong';
      return '';
    });
  },

  /* 加载指定下标 ±5 题 */
  loadRange(center) {
    const start = Math.max(center - 5, 0);
    const end = Math.min(center + 5, this.data.totalCount - 1);

    const updateObj = {};
    for (let i = start; i <= end; i++) {
      if (!this.data.questionList[i].loaded) {
        updateObj[`questionList[${i}]`] = this.mockQuestion(i);
      }
    }
    this.setData(updateObj); 
  },

  clearAllData() {
    wx.showModal({
      title: '提示',
      content: '确定要清空所有答题记录并重新开始？',
      success: (res) => {
        if (res.confirm) {
          // 1. 清本地缓存
          wx.removeStorageSync('quizData_cache');
          // 2. 恢复页面初始数据
          this.setData({
            currentIndex: 0,
            correctCount: 0,
            wrongCount: 0,
            showMask: false,
            // 重新生成 120 个空壳节点
            questionList: Array.from({
              length: 120
            }, (_, i) => ({
              id: i,
              loaded: false
            }))
          });

          // 3. 重新加载当前范围
          this.loadRange(0);

          // 4. 把 swiper 切回第 0 题
          const swiper = this.selectComponent('#swiper');
          swiper && swiper.setData({
            current: 0
          });

          wx.showToast({
            title: '已清空',
            icon: 'success'
          });
        }
      }
    });
  },

  /* swiper 滑动事件 */
  onSwiperChange(e) {
    const idx = e.detail.current;
    this.setData({
      currentIndex: idx
    });
    this.loadRange(idx);
  },

  goToFeedback() {
    wx.navigateTo({
      url: '/pages/Feedback/Feedback'
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    const cacheData = {
      questionList: this.data.questionList,
      currentIndex: this.data.currentIndex,
      correctCount: this.data.correctCount,
      wrongCount: this.data.wrongCount
    }
    wx.setStorageSync('quizData_cache', cacheData)
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})